﻿#include "classfordnsiniform.h"
#include "ui_classfordnsiniform.h"

#include <QListWidgetItem>
#include <QSettings>

ClassForDnsIniForm::ClassForDnsIniForm(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ClassForDnsIniForm)
{
    ui->setupUi(this);
    QByteArray varQByArrOfFormTitle = "DNS列表";
    QByteArray varQByArrOfOkText = "保存";
    QByteArray varQByArrOfCancelText = "取消";

    ChMSTextCodec ChMSTc;
    QString varQStrFormTitle = ChMSTc.funQStrTextCodec(varQByArrOfFormTitle);
    QString varQStrOfOkText = ChMSTc.funQStrTextCodec(varQByArrOfOkText);
    QString varQStrOfCancelText = ChMSTc.funQStrTextCodec(varQByArrOfCancelText);

    this->setWindowTitle(varQStrFormTitle);
    ui->diaButBoxOfOkOrCancel->button(QDialogButtonBox::Ok)->setText(varQStrOfOkText);
    ui->diaButBoxOfOkOrCancel->button(QDialogButtonBox::Cancel)->setText(varQStrOfCancelText);

    /*
     * 全局对象与变量申请和初始化
     * */
    // 加载程序基础配置
    pAppBase = new AppBase;


    // 单击 添加 按钮事件 ，增加 DNS 记录
    connect(ui->pusButOfAddItem,&QPushButton::clicked,this,&ClassForDnsIniForm::funSlotsOfAddItemClicked);

    // 单击 OK 按钮事件
    connect(ui->diaButBoxOfOkOrCancel,&QDialogButtonBox::accepted,this,&ClassForDnsIniForm::funSlotsOfOkButtonClicked);

    //connect(ui->diaButBoxOfOkOrCancel,&QDialogButtonBox::accepted,this,&ClassForDnsIniForm::funSlotsOfOkButtonClicked);

    // 单击 上移 按钮事件
    connect(ui->pusButMoveUp,&QPushButton::clicked,this,&ClassForDnsIniForm::funSlotsOfMoveUp);
    // 单击 下移 按钮事件
    connect(ui->pusButMoveDown,&QPushButton::clicked,this,&ClassForDnsIniForm::funSlotsOfMoveDown);
    // 单击 删除 按钮事件
    connect(ui->pusButDelete,&QPushButton::clicked,this,&ClassForDnsIniForm::funSlotsOfDelete);
}

ClassForDnsIniForm::~ClassForDnsIniForm()
{
    delete ui;
}

// 添加DNS服务器
void ClassForDnsIniForm::funSlotsOfAddItemClicked()
{
    // 获取 输入的 DNS 服务器地址
    QString varQStrOfDnsServer = ui->linEdOfDnsServer->text().remove(QRegExp("\\s"));
    // 输入是空的就返回
    if(varQStrOfDnsServer.isEmpty())
    {
        return;
    }
    QListWidgetItem* pVarItem = new QListWidgetItem(ui->lisWidOfDnsList);
    //int varIntOfListItemCount = 0;

    pVarItem->setText(varQStrOfDnsServer);
    ui->lisWidOfDnsList->addItem(pVarItem);

    for(int i = 0; i < ui->lisWidOfDnsList->count(); i++)
    {
        pVarItem = ui->lisWidOfDnsList->item(i);
        pVarItem->setFlags(pVarItem->flags() | Qt::ItemIsEditable);
        pVarItem->listWidget()->setEditTriggers(QAbstractItemView::DoubleClicked);
    }

    ui->linEdOfDnsServer->clear();
}

// 单击 OK 按钮 编辑窗口 并保存DNS服务器列表
void ClassForDnsIniForm::funSlotsOfOkButtonClicked()
{
    ChMSAppPath StructAppPath; // INI 配置文件路径
    QString varQStrConKey = "DNS"; // 保存到 INI 时 key的前缀名字
    QString varQStrConSetValue = ""; // 保存到 INI 文件时的 值
    QStringList varQStrListSendData = {}; // 用来保存列表，传送给父窗口

    QSettings dnsIniSeting(StructAppPath.iniOfDNSPath,QSettings::IniFormat);
    dnsIniSeting.setIniCodec("UTF-8");

    // 先清空原有保存的列表.
    dnsIniSeting.beginGroup("DNS_Servers");
    dnsIniSeting.clear();
    dnsIniSeting.endGroup();

    // 写入新的列表
    dnsIniSeting.beginGroup("DNS_Servers");
    for(int i = 0; i < ui->lisWidOfDnsList->count(); i++)
    {
        varQStrConSetValue = ui->lisWidOfDnsList->item(i)->text();
        dnsIniSeting.setValue(varQStrConKey+QString::number(i),varQStrConSetValue);
        varQStrListSendData << varQStrConSetValue;
    }
    dnsIniSeting.endGroup();

    emit signalOfSendToParent(varQStrListSendData);

}

// 单击 Cancel 按钮事件
void ClassForDnsIniForm::funSlotsOfCancelButtonClicked()
{

}

// 单击 上移 按钮事件
void ClassForDnsIniForm::funSlotsOfMoveUp()
{
    QListWidgetItem *varItem = ui->lisWidOfDnsList->currentItem(); // 获取被选中item
    if(varItem) // 如果有选中item
    {
        int varRow = ui->lisWidOfDnsList->row(varItem); // 获取其位置
        if(varRow > 0) // 如果不是第一个
        {
            ui->lisWidOfDnsList->takeItem(varRow); // 移除item
            ui->lisWidOfDnsList->insertItem(varRow - 1, varItem); // 插入到前一个位置
            ui->lisWidOfDnsList->setCurrentItem(varItem); // 选中移动后的item
        }
    }
}

// 单击 下移 按钮事件
void ClassForDnsIniForm::funSlotsOfMoveDown()
{
    QListWidgetItem *varItem = ui->lisWidOfDnsList->currentItem(); // 获取被选中item
    if(varItem) // 如果有选中item
    {
        int varRow = ui->lisWidOfDnsList->row(varItem); // 获取其位置
        if(varRow < ui->lisWidOfDnsList->count()) // 如果不是第一个
        {
            ui->lisWidOfDnsList->takeItem(varRow); // 移除item
            ui->lisWidOfDnsList->insertItem(varRow + 1, varItem); // 插入到前一个位置
            ui->lisWidOfDnsList->setCurrentItem(varItem); // 选中移动后的item
        }
    }
}

// 单击 删除 按钮事件
void ClassForDnsIniForm::funSlotsOfDelete()
{
    // 读取当前选择的行
    QListWidgetItem* varItem = ui->lisWidOfDnsList->currentItem();
    int row = 0;

    if(varItem)
    {
        row = ui->lisWidOfDnsList->row(varItem); // 取得行号
        ui->lisWidOfDnsList->takeItem(row); // 删除对应的行
    }

}

// 获取从父窗口得到的数据
void ClassForDnsIniForm::funSlotsOfReceiveDnsData(QStringList &comList)
{
    //QListWidgetItem* pVarItem = new QListWidgetItem(ui->lisWidOfDnsList);

    ui->lisWidOfDnsList->clear();
    ui->lisWidOfDnsList->addItems(comList);
    /*
    for(int i = 0; i < ui->lisWidOfDnsList->count(); i++)
    {
        pVarItem = ui->lisWidOfDnsList->item(i);
        pVarItem->setFlags(pVarItem->flags() | Qt::ItemIsEditable);
        pVarItem->listWidget()->setEditTriggers(QAbstractItemView::DoubleClicked);
    }
    */
}
